# @Filename:    01-张量的创建
# @Author:      王佳伟
# @Time:        2025-03-18 10:57
# @Describe:
import torch
import numpy as np

# 1. 创建张量标量
print(torch.tensor(10))

# 2. numpy数组，由于data为float64，下面代码也是用该类型
print(torch.tensor(np.random.randn(2, 3)))

# 3. 列表，下面代码使用默认元素类型 float32
print(torch.tensor([[10., 20., 30.], [40., 50., 60.]]))

print('---------------------------------')

# 4. 创建2行3列的张量，默认dtype为float32
print(torch.Tensor(2, 3))

# 5. 如果传递列表，则创建包含指定元素的张量
print(torch.Tensor([10]))

print(torch.Tensor([10, 20]))

print('---------------------------------')

# 6. 在指定区间按照步长生成元素 [start, end, step]
print(torch.arange(0, 10, 2))

# 7. 在指定区间按照元素个数生成 [start, end, num]
print(torch.linspace(0, 10, 11))

# 8. 创建随机张量
print(torch.randn(2, 3))

print('---------------------------------')

# 9. 创建指定形状全0张量
print(torch.zeros(2, 3))

# 10. 创建指定形状全1张量
print(torch.ones(2, 3))

# 11. 创建指定形状指定值的张量
print(torch.full([2, 3], 10))

print('---------------------------------')

# 张量元素类型转换
data = torch.full([2, 3], 10)
print(data.dtype)

# 将data元素类型转换为float64类型
data1 = data.type(torch.DoubleTensor)
print(data1.dtype)

data2 = data.double()
print(data2.dtype)

# 转换为其他类型
# data = data.type(torch.IntTensor)
# data = data.type(torch.LongTensor)
# data = data.type(torch.FloatTensor)

# data = data.int()
# data = data.long()
# data = data.float()

'''
1.创建张量的方式
• torch.tensor() 根据指定数据创建张量
• torch.Tensor() 根据形状创建张量, 其也可用来创建指定数据的张量
2.创建线性和随机张量
• torch.arrange() 和torch.linspace() 创建线性张量
• torch.randn() 创建随机张量
3.创建01张量
• torch.ones() 创建全1张量
• torch.zeros() 创建全0张量
• torch.full() 创建全为指定值张量
4.张量元素类型转换
• data.type(torch.DoubleTensor)
• data.double()
'''
